#include"dynamicArrayStack.h"
#include<stdio.h>
#include<stdlib.h>
#include <string.h>

#define BUFFER_SIZE 10

/* 状态码 */
enum STATUS_CODE
{
    ON_SUCCESS,
    MALLOC_ERROR,
    NULL_PTR,
    INVALID_ACCESS,
};

int isValid(char *s)
{
    int idx= 0;
    char *getData = NULL;//用于带出栈顶元素
    DynamicArrayStack stack;//首先定义一个栈
    dynamicArrayStackInit(&stack);
    if(s == NULL)
    {
        return NULL_PTR;
    }  
    for(idx = 0; *(s + idx) != '\0'; idx++)
    {
        if(*(s + idx) == '(' || *(s + idx) == '[' || *(s + idx) == '{')
        {
            dynamicArrayStackPush(&stack, (void *)(s + idx));
        }
        else if(idx == 0)
        {  
            dynamicArrayStackDestroy(&stack);
            return 0;
        }
        if(*(s + idx) == ')')
        {
            int acceptDatas = dynamicArrayStackIsEmpty(&stack);//查看栈顶元素，是否为空，为空返回1，不为空返回0
            if(acceptDatas == 1)
            {  
                dynamicArrayStackDestroy(&stack);
                return 0;
            }

            dynamicArrayStackTop(&stack, (void **)&getData);
            //getData == ''
            if(*getData == '(')
            {   
                dynamicArrayStackPop(&stack);
                continue;
                // dynamicArrayStackDestroy(&stack);
                // return flag = 1;//flag=1表示匹配成功?????????????????????????????????????????
            }
            else
            {  
                dynamicArrayStackDestroy(&stack);
                return  0;
            }
        }
        if(*(s + idx) == ']')
        {
            int acceptDatas = dynamicArrayStackIsEmpty(&stack);
            if(acceptDatas == 1)
                return  0;     
            dynamicArrayStackTop(&stack, (void **)&getData);
            //getData == ''
            if(*getData == '[')
            {  
                dynamicArrayStackPop(&stack);
                continue;
                // dynamicArrayStackDestroy(&stack);
                // return flag = 1;//flag=1表示匹配成功?????????????????????????????????????????
            }
            else
            {  
                dynamicArrayStackDestroy(&stack);
                return 0;
            }
        }
        if(*(s + idx) == '}')
        {
            int acceptDatas = dynamicArrayStackIsEmpty(&stack);
            if(acceptDatas == 1)
                return  0;     
            dynamicArrayStackTop(&stack, (void **)&getData);
            //getData == ''
            if(*getData == '{')
            {
                dynamicArrayStackPop(&stack);
                continue;
                // dynamicArrayStackDestroy(&stack);
                // return flag = 1;//flag=1表示匹配成功?????????????????????????????????????????
            }
            else
            {  
                dynamicArrayStackDestroy(&stack);
                return  0;
            }
            
        }

        // if(flag)
        //     return 1;
        // else
        //     return 0;
        // if(idx /2 == 0)
        //     return 1;
        // else
        //     return 0;
        // dynamicArrayStackDestroy(&stack);

        // if(idx / 2 != 0)
        // {
        //     dynamicArrayStackDestroy(&stack);
        //     return 1;
        // }
        // else
        // {
        //    dynamicArrayStackDestroy(&stack);
        //     return 0;
        // }
            
    }
    if(dynamicArrayStackIsEmpty(&stack) == 0)
    {
        dynamicArrayStackDestroy(&stack);
        return 0;
    }
    else
    {
        dynamicArrayStackDestroy(&stack);
        return 1;
    }
        
}


int main()
{
    // DynamicArrayStack stack;
    // dynamicArrayStackInit(&stack);

    // int nums[BUFFER_SIZE] = {11, 22, 33, 44, 55};

    // for (int idx = 0; idx < BUFFER_SIZE; idx++)
    // {
    //     dynamicArrayStackPush(&stack, (void *)&nums[idx]);
    // }
    
    // int size = 0;
    // dynamicArrayStackGetSize(&stack, &size);
    // printf("size:%d\n", size);

    // int *topVal = NULL;
    // while (dynamicArrayStackGetSize(&stack, &size) != 0)
    // {
    //     dynamicArrayStackTop(&stack, (void **)&topVal);
    //     dynamicArrayStackPop(&stack);

    //     printf("top value:%d\n", *topVal);
    // }

    /* 以下为leetCode20题 */
    /* 销毁 */

    char input[BUFFER_SIZE];
    char buffer[] = "(){}[]";
    int size = sizeof(buffer);
    printf("请输入字符：");

    scanf("%s",input);
    int acceptData = isValid(input);
    if(acceptData == 1)
        printf("true\n");
    else
        printf("flase\n");
    // dynamicArrayStackDegetDataoy(&stack);
    return 0;
}